package com.liuxinlong.modules.system.service;

import java.util.List;
import java.util.Map;

import com.liuxinlong.common.ImportResp;
import com.liuxinlong.modules.entity.User;
import com.liuxinlong.modules.entity.UserStandardPermission;
import com.liuxinlong.modules.system.dto.ImportUserDto;
import com.liuxinlong.modules.system.dto.WechatUserDto;

import javax.servlet.http.HttpServletResponse;

/**
 * 用户信息接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2021-12-28
 */
public interface UserService {
    /**
     * 分页查询用户信息
     *
     * @param queryParam 请求信息
     * @return 用户信息列表
     */
    List<Map<String, Object>> pageUserInfo(Map<String, Object> queryParam);

    /**
     * 查询用户信息总数
     *
     * @param queryParam 请求信息
     * @return 用户信息总数
     */
    int getUserCount(Map<String, Object> queryParam);

    /**
     * 新增用户信息
     *
     * @param user      用户信息
     * @param userRole  用户角色信息
     * @param userPost 用户岗位信息
     */
    void addUserInfo(User user, String userRole, String userPost);

    /**
     * 更新用户信息
     *
     * @param user      用户信息
     * @param userRole  用户角色信息
     * @param userPost 用户岗位信息
     */
    void updateUserInfo(User user, String userRole, String userPost);

    /**
     * 删除用户信息
     *
     * @param id 用户id
     */
    void deleteUserInfo(String id);

    /**
     * 用户登录
     *
     * @param userInfo 登录信息
     * @return 登录成功权限信息
     */
    Map<String, Object> userLogin(User userInfo);

    /**
     * 用户密码修改
     *
     * @param oldPass 新密码
     * @param newPass 新密码
     */
    void updatePassword(String oldPass, String newPass);

    /**
     * 用户登出
     */
    void userLogout();

    /**
     * 获取当前用户信息
     *
     * @return 当前用户信息
     */
    Map<String,Object> getCurrentUser();

    /**
     * 强制下线用户
     *
     * @param id 用户id
     */
    void offlineUser(String id);

    /**
     * 用户黑名单操作
     *
     * @param id 用户id
     */
    void blackUser(String id);

    /**
     * 重置用户密码
     *
     * @param id 用户id
     */
    void resetUser(String id);

    /**
     * 查询用户拓展信息
     *
     * @return 用户拓展信息
     */
    Map<String, Object> queryUserExpInfo();

    /**
     * 更新用户拓展信息
     *
     * @param user 用户信息
     */
    void updateUserExpInfo(User user);

    /**
     * 查询用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    Map<String, Object> queryUserBase(String id);

    /**
     * 查询用户所在组信息
     *
     * @param userId 用户id
     * @return 用户组信息
     */
    List<String> queryUserGroup(String userId);

    /**
     * 导入数据预处理
     *
     * @param fileName 文件地址
     * @return 预处理数据
     */
    ImportResp importUser(String fileName);

    /**
     * 批量新增用户信息
     *
     * @param dataList 用户列表
     * @return 失败数据
     */
    ImportResp batchAddUser(List<ImportUserDto> dataList);

    /**
     * 导出用户信息
     *
     * @param response response
     */
    void exportUser(HttpServletResponse response);

    /**
     * 查询用户标准权限
     *
     * @param queryParam 查询参数
     * @return 用户标准权限信息
     */
    List<Map<String,Object>> queryStandardPermission(Map<String,Object> queryParam);

    /**
     * 修改用户标准权限
     *
     * @param userStandardPermission 用户标准权限
     */
    void updateStandardPermission(UserStandardPermission userStandardPermission);

    /**
     * 删除用户标准权限
     *
     * @param id 用户标准权限id
     */
    void deleteStandardPermission(String id);

    /**
     * 获取企业微信用户信息
     */
    List<WechatUserDto> queryWechatUserList();

    /**
     * 同步用户企业微信信息
     */
    void syncWechatInfo();

    /**
     * 查询用户在线统计信息
     *
     * @param queryParam 查询条件
     * @return 用户在线统计信息
     */
    List<Map<String,Object>> queryUserOnlineStatistics(Map<String,Object> queryParam);
}
